<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>集合实践</title>
  </head>
  <body>
    <script>
      // 1. 数组去重
      let arr = [1, 2, 3, 4, 5, 4, 2, 3, 1];
      let s1 = new Set(arr);
      console.log([...s1]);
      // console.log(Array.of(...s1));
      // 2. 交集
      let arr2 = [4, 5, 6, 5, 4, 6];
      // filter回调函数形参为被遍历数组的元素,返回一个新数组，新数组中的元素是原始数组中符合条件(返回结果为true)的元素
      let result = [...new Set(arr)].filter((item) => {
        // item 是数组中的元素
        let s2 = new Set(arr2); // 集合
        return s2.has(item); // 判断集合中是否有数组中的元素
      });
      // 代码简化
      /* let result = [...new Set(arr)].filter((item) => new Set(arr).has(item)); */
      console.log(result);
      // 3. 并集
      let union = [...new Set([...arr, ...arr2])];
      console.log(union);
      // 4. 差集
      let difference = [...new Set(arr)].filter(
        (item) => !new Set(arr2).has(item)
      ); // 返回结果为true 将item添加到新数组中
      console.log(difference);
    </script>
  </body>
</html>
